home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QRZ! Ham Radio 8
/
QRZ Ham Radio Callsign Database - Volume 8.iso
/
pc
/
files
/
ant_nec
/
nec81tar.z
/
nec81tar
/
datagn.f
< prev
next >
Wrap
Text File
|
1991-05-13
|
23KB
|
905 lines
C $TITLE: 'DATAGN'
C $NOFLOATCALLS
SUBROUTINE DATAGN(CM,ZARRAY,X,Y,Z,BI,SALP,T1X,T1Y,T1Z,T2X,T2Y,
1 T2Z,ICON1,ICON2,ITAG,ICONX,IP,LD,LD2,IRESRV,IR,IW,IGFL)
C
C DATAGN IS THE MAIN ROUTINE FOR INPUT OF GEOMETRY DATA.
C
C***
REAL*8 TA,TD,ATGN2,XW1,YW1,ZW1,XW2,YW2,ZW2
CLARGE: CM
COMPLEX CM
COMPLEX*16 ZARRAY
INTEGER*4 ICON1,ICON2,ITAG,ICONX,N1,N2,N,NP,M1,
1 M2,M,MP,IPSYM,IPSAV
CHARACTER*2 ATST,AGM
CHARACTER*1 APT,AFX,AFY,AFZ
C***
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
C***
COMMON/PLOT/ IPLP1,IPLP2,IPLP3,IPLP4
C***
DIMENSION CM(IRESRV),ZARRAY(LD)
DIMENSION ICON1(LD),ICON2(LD),ITAG(LD),ICONX(LD),IP(LD2)
DIMENSION X(LD),Y(LD),Z(LD),BI(LD),SALP(LD),
1 T1X(LD),T1Y(LD),T1Z(LD),T2X(LD),T2Y(LD),T2Z(LD)
C***
C*** GP STUFF SUPPRESS GEOMETRY PRINT RWA 29 MAR 89 CHNG 1 LINE
C***
DIMENSION AFX(2),AFY(2),AFZ(2),APT(4),ATST(14)
C**
C $NODEBUG
C**
C***
C*** GP STUFF SUPPRESS GEOMETRY PRINT RWA 29 MAR 89 CHNG 1 LINE
C***
DATA ATST/2HGW,2HGX,2HGR,2HGS,2HGE,2HGM,2HSP,2HSM,2HGF,2HGA,
1 2HSC,2HGC,2HGP,2HGH/
DATA AFX/1H ,1HX/,AFY/1H ,1HY/,AFZ/1H ,1HZ/
DATA TA/0.01745329252D0/,TD/57.29577951D0/,APT/1HP,1HR,1HT,1HQ/
C***
$DEBUG
C**
C**
C D WRITE(*,*) ' DATAGN: START'
C**
C***
C*** GP STUFF SUPPRESS GEOMETRY PRINT RWA 39 MAR 89 ADD 1 LINE
C***
IGPFLG = 0
IPSYM=0
NWIRE=0
N=0
NP=0
M=0
MP=0
N1=0
N2=1
M1=0
M2=1
ISCT=0
IPHD=0
C
C READ GEOMETRY DATA CARD AND BRANCH TO SECTION FOR OPERATION
C REQUESTED
C
1 READ (IR,42) AGM,ITG,NS,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD
IF (N+M.GT.LD) GO TO 37
IF (AGM.EQ.ATST(9)) GO TO 27
IF (IPHD.EQ.1) GO TO 2
WRITE(IW,40)
WRITE(IW,41)
IPHD=1
C**
2 IF (AGM.EQ.ATST(11)) GO TO 10
ISCT=0
C***
C*** GP STUFF SUPPRESS GEOMETRY PRINT RWA 29 MAR 89 ADD 1 LINE
C***
IF (AGM.EQ.ATST(13)) GO TO 311
IF (AGM.EQ.ATST(1)) GO TO 3
IF (AGM.EQ.ATST(2)) GO TO 18
IF (AGM.EQ.ATST(3)) GO TO 19
IF (AGM.EQ.ATST(4)) GO TO 21
IF (AGM.EQ.ATST(7)) GO TO 9
IF (AGM.EQ.ATST(8)) GO TO 13
IF (AGM.EQ.ATST(5)) GO TO 29
IF (AGM.EQ.ATST(6)) GO TO 26
IF (AGM.EQ.ATST(10)) GO TO 8
C***
C***
C*** GP STUFF SUPPRESS GEOMETRY PRINT RWA 39 MAR 89 CHNG 1 LINE
C***
IF (AGM.EQ.ATST(14)) GO TO 123
C***
GO TO 36
C
C GENERATE SEGMENT DATA FOR STRAIGHT WIRE.
C
3 NWIRE=NWIRE+1
I1=N+1
I2=N+NS
WRITE(IW,43) NWIRE,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD,NS,I1,I2,ITG
IF (RAD.EQ.0) GO TO 4
XS1=1.
YS1=1.
GO TO 7
4 READ (IR,42) AGM,IX,IY,XS1,YS1,ZS1
IF (AGM.EQ.ATST(12)) GO TO 6
5 WRITE(*,48)
STOP
6 WRITE(IW,61) XS1,YS1,ZS1
IF (YS1.EQ.0.OR.ZS1.EQ.0) GO TO 5
RAD=YS1
YS1=(ZS1/YS1)**(1./(NS-1.))
7 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: CALL WIRE'
C**
CALL WIRE(X,Y,Z,BI,T1X,T1Y,T1Z,XW1,YW1,ZW1,XW2,YW2,ZW2,
1 RAD,XS1,YS1,ITAG,LD,NS,ITG)
C**
GO TO 1
C
C GENERATE SEGMENT DATA FOR WIRE ARC
C
8 NWIRE=NWIRE+1
I1=N+1
I2=N+NS
WRITE(IW,38) NWIRE,XW1,YW1,ZW1,XW2,NS,I1,I2,ITG
C**
C E WRITE(*,*) ' DATAGN: CALL ARC'
C**
CALL ARC(ITG,NS,XW1,YW1,ZW1,XW2,X,Y,Z,BI,ITAG,T1X,T1Y,T1Z,LD)
C**
C E WRITE(*,*) ' DATAGN: RTRN ARC'
C**
GO TO 1
123 NWIRE=NWIRE+1
I1=N+1
I2=N+NS
C***
C*** GH STUFF NEW HELIX FROM NEC3 RWA 1 APR 89 WILL CHNG 2 LINES
C***
WRITE(IW,124) XW1,YW1,NWIRE,ZW1,XW2,YW2,ZW2,RAD,NS,I1,I2,ITG
C*** WRITE (IW,124) XW2,ZW1,NWIRE,XW1,YW1,YW2,NS,I1,I1,ITG
C*** CALL HELIX(IW,ITG,NS,XW1,YW1,ZW1,XW2,YW2,X,Y,Z,
C*** 1 BI,ITAG,T1X,T1Y,T1Z,LD)
C**
C E WRITE(*,*) ' DATAGN: CALL HELIX'
C**
CALL HELIX(IW,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD,NS,ITG,X,Y,Z,
1 BI,ITAG,T1X,T1Y,T1Z,LD)
C**
C E WRITE(*,*) ' DATAGN: RTRN HELIX'
C**
GO TO 1
C
124 FORMAT(5X,'HELIX STRUCTURE- AXIAL SPACING BETWEEN TURNS =',F8.3,
1' TOTAL AXIAL LENGTH =',F8.3/1X,I5,2X,'RADIUS OF HELIX =',4(2X,
2F8.3),7X,F11.5,I8,4X,I5,1X,I5,3X,I5)
C***
C
C GENERATE SINGLE NEW PATCH
C
9 I1=M+1
NS=NS+1
IF (ITG.NE.0) GO TO 17
WRITE(IW,51) I1,APT(NS),XW1,YW1,ZW1,XW2,YW2,ZW2
IF (NS.EQ.2.OR.NS.EQ.4) ISCT=1
IF (NS.GT.1) GO TO 14
XW2=XW2*TA
YW2=YW2*TA
GO TO 16
10 IF (ISCT.EQ.0) GO TO 17
I1=M+1
NS=NS+1
IF (ITG.NE.0) GO TO 17
IF (NS.NE.2.AND.NS.NE.4) GO TO 17
XS1=X4
YS1=Y4
ZS1=Z4
XS2=X3
YS2=Y3
ZS2=Z3
X3=XW1
Y3=YW1
Z3=ZW1
IF (NS.NE.4) GO TO 11
X4=XW2
Y4=YW2
Z4=ZW2
11 XW1=XS1
YW1=YS1
ZW1=ZS1
XW2=XS2
YW2=YS2
ZW2=ZS2
IF (NS.EQ.4) GO TO 12
X4=XW1+X3-XW2
Y4=YW1+Y3-YW2
Z4=ZW1+Z3-ZW2
12 WRITE(IW,51) I1,APT(NS),XW1,YW1,ZW1,XW2,YW2,ZW2
WRITE(IW,39) X3,Y3,Z3,X4,Y4,Z4
GO TO 16
C
C GENERATE MULTIPLE-PATCH SURFACE
C
13 I1=M+1
WRITE(IW,59) I1,APT(2),XW1,YW1,ZW1,XW2,YW2,ZW2,ITG,NS
IF (ITG.LT.1.OR.NS.LT.1) GO TO 17
14 READ (IR,42) AGM,IX,IY,X3,Y3,Z3,X4,Y4,Z4
IF (NS.NE.2.AND.ITG.LT.1) GO TO 15
X4=XW1+X3-XW2
Y4=YW1+Y3-YW2
Z4=ZW1+Z3-ZW2
15 WRITE(IW,39) X3,Y3,Z3,X4,Y4,Z4
IF (AGM.NE.ATST(11)) GO TO 17
16 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: CALL PATCH'
C**
CALL PATCH (ITG,NS,XW1,YW1,ZW1,XW2,YW2,ZW2,X3,Y3,Z3,X4,Y4,Z4,
1 X,Y,Z,BI,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,LD)
C**
C D WRITE(*,*) ' DATAGN: RTRN PATCH'
C**
GO TO 1
17 WRITE(*,60)
STOP
C
C REFLECT STRUCTURE ALONG X,Y, OR Z AXES OR ROTATE TO FORM CYLINDER.
C
18 IY=NS/10
IZ=NS-IY*10
IX=IY/10
IY=IY-IX*10
IF (IX.NE.0) IX=1
IF (IY.NE.0) IY=1
IF (IZ.NE.0) IZ=1
WRITE(IW,44) AFX(IX+1),AFY(IY+1),AFZ(IZ+1),ITG
GO TO 20
19 WRITE(IW,45) NS,ITG
IX=-1
20 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: CALL REFLC'
C**
CALL REFLC (IX,IY,IZ,ITG,NS,LD,X,Y,Z,BI,
1 ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,T1X,T1Y,T1Z)
C**
C D WRITE(*,*) ' DATAGN: RTRN REFLC'
C**
GO TO 1
C
C SCALE STRUCTURE DIMENSIONS BY FACTOR XW1.
C
C***
C*** GS STUFF - SCALING OPTION RWA 02 APR 89 ADD 5 LINES
C***
21 IF (ITG-1) 211,212,213
212 XW1 = 0.3048
GO TO 211
213 XW1 = 0.0254
211 IF (N.LT.N2) GO TO 23
CCC21 CONTINUE
CCC IF (N.LT.N2) GO TO 23
DO 22 I=N2,N
X(I)=X(I)*XW1
Y(I)=Y(I)*XW1
Z(I)=Z(I)*XW1
T1X(I)=T1X(I)*XW1
T1Y(I)=T1Y(I)*XW1
T1Z(I)=T1Z(I)*XW1
22 BI(I)=BI(I)*XW1
23 CONTINUE
IF (M.LT.M2) GO TO 25
YW1=XW1*XW1
IX=LD+1-M
IY=LD-M1
DO 24 I=IX,IY
X(I)=X(I)*XW1
Y(I)=Y(I)*XW1
Z(I)=Z(I)*XW1
24 BI(I)=BI(I)*YW1
25 CONTINUE
WRITE(IW,46) XW1
GO TO 1
C
C MOVE STRUCTURE OR REPRODUCE ORIGINAL STRUCTURE IN NEW POSITIONS.
C
26 CONTINUE
WRITE(IW,47) ITG,NS,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD
XW1=XW1*TA
YW1=YW1*TA
ZW1=ZW1*TA
C**
C D WRITE(*,*) ' DATAGN: CALL MOVE'
C**
C***
C*** GM STUFF - SELECTED MOVE OPTION RWA 02 APR 89 ADD 3 LINES
C*** CHNG 2 LINES
RAD = RAD + .5E-3
IMOV1 = INT(RAD)
IMOV2 = INT((RAD - IMOV1)*1.E3)
CCC CALL MOVE (XW1,YW1,ZW1,XW2,YW2,ZW2,INT(RAD+.5),NS,ITG,LD,X,Y,Z,
CCC 1 BI,ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,T1X,T1Y,T1Z)
CALL MOVE (XW1,YW1,ZW1,XW2,YW2,ZW2,IMOV1,IMOV2,NS,ITG,LD,X,Y,Z,
1 BI,ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,T1X,T1Y,T1Z)
C**
C D WRITE(*,*) ' DATAGN: RTRN MOVE'
C**
GO TO 1
C
C READ NUMERICAL GREEN'S FUNCTION TAPE
C
27 IF (N+M.EQ.0) GO TO 28
WRITE(*,52)
STOP
28 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: CALL GFIL'
C**
CALL GFIL(CM,ZARRAY,X,Y,Z,T1X,BI,T1Y,T1Z,SALP,
1 ICON1,ICON2,ITAG,IP,IW,IGFL,ITG,LD,LD2,IRESRV)
C**
C D WRITE(*,*) ' DATAGN: RTRN GFIL'
C**
NPSAV=NP
MPSAV=MP
IPSAV=IPSYM
GO TO 1
C
C TERMINATE STRUCTURE GEOMETRY INPUT.
C
C***
C*** GE 1,1 OPTION - GEOMETRY OUTPUT FOR GTD CURRENT
C*** RWA 02 APR 89 - CHANGE 1 LINE
C***
29 IF (XW1.GT.0) IRESRV=IFIX(XW1)
CCC29 CONTINUE
IF(NS.EQ.0) GO TO 290
IPLP1=1
IPLP2=1
C***
C*** GE 1,2 OPTION - GEOMETRY OUTPUT FOR CURRPLOT
C*** RWA 02 APR 89 - ADD 2 LINES
C***
IF(NS.NE.2) GO TO 290
IPLP2 = 2
290 IX=N1+M1
C***
IF (IX.EQ.0) GO TO 30
NP=N
MP=M
IPSYM=0
30 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: CALL CONECT'
C**
CALL CONECT(X,Y,Z,BI,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,
1 ICON1,ICON2,ICONX,ITG,IW,LD)
C**
C D WRITE(*,*) ' DATAGN: RTRN CONECT'
C**
IF (IX.EQ.0) GO TO 31
NP=NPSAV
MP=MPSAV
IPSYM=IPSAV
31 IF (N+M.GT.LD) GO TO 37
IF (N.EQ.0) GO TO 33
WRITE(IW,53)
WRITE(IW,54)
DO 32 I=1,N
XW1=T1X(I)-X(I)
YW1=T1Y(I)-Y(I)
ZW1=T1Z(I)-Z(I)
X(I)=(X(I)+T1X(I))*.5
Y(I)=(Y(I)+T1Y(I))*.5
Z(I)=(Z(I)+T1Z(I))*.5
XW2=XW1*XW1+YW1*YW1+ZW1*ZW1
YW2=DSQRT(XW2)
YW2=(XW2/YW2+YW2)*.5
T1X(I)=YW2
T1Y(I)=XW1/YW2
T1Z(I)=YW1/YW2
XW2=ZW1/YW2
IF (XW2.GT.1.) XW2=1.
IF (XW2.LT.-1.) XW2=-1.
SALP(I)=XW2
XW2=DASIN(1.D0*XW2)*TD
YW2=ATGN2(YW1,XW1)*TD
C***
C*** GP STUFF - SUPPRESS GEOMETRY PRINT RWA 02 APR 89 ADD 1 LINE
C***
IF (IGPFLG.EQ.1) GO TO 319
WRITE(IW,55) I,X(I),Y(I),Z(I),T1X(I),XW2,YW2,BI(I),ICON1(I),I,
1ICON2(I),ITAG(I)
C***
C*** GE 1,1 OPTION - GEOMETRY OUTPUT FOR GTD CURRENTS
C*** RWA 02 APR 89 CHANGE 1 LINE
C***
319 IF(IPLP1.NE.1) GO TO 320
C***
C*** GE 1,2 OPTION - GEOMETRY OUTPUT FOR CURRPLOT
C*** RWA 02 APR 89 ADD 4 LINES
C***
IF(IPLP2.NE.2)GO TO 3199
WRITE(8,*) X(I),Y(I),Z(I),T1X(I),I,ITAG(I)
GO TO 320
3199 CONTINUE
WRITE(8,*)X(I),Y(I),Z(I),T1X(I),XW2,YW2,BI(I),ICON1(I),I,ICON2(I)
320 CONTINUE
C***
IF (T1X(I).GT.1.E-20.AND.BI(I).GT.0.) GO TO 32
WRITE(*,56)
STOP
32 CONTINUE
33 IF (M.EQ.0) GO TO 35
WRITE(IW,57)
J=LD+1
DO 34 I=1,M
J=J-1
XW1=(T1Y(J)*T2Z(J)-T1Z(J)*T2Y(J))*SALP(J)
YW1=(T1Z(J)*T2X(J)-T1X(J)*T2Z(J))*SALP(J)
ZW1=(T1X(J)*T2Y(J)-T1Y(J)*T2X(J))*SALP(J)
C***
C*** GP STUFF - SUPPRESS GEOMETRY PRINT RWA 02 APR 89 ADD 1 LINE
C***
IF(IGPFLG.EQ.1)GO TO 34
WRITE(IW,58) I,X(J),Y(J),Z(J),XW1,YW1,ZW1,BI(J),T1X(J),T1Y(J),
1T1Z(J),T2X(J),T2Y(J),T2Z(J)
34 CONTINUE
35 CONTINUE
C**
C D WRITE(*,*) ' DATAGN: RETURN'
C**
RETURN
C***
C*** GP STUFF - SUPPRESS GEOMETRY PRINT RWA 02 APR 89 ADD 2 LINES
C***
311 IGPFLG = 1
GO TO 1
36 WRITE(IW,48)
WRITE(*,49) AGM,ITG,NS,XW1,YW1,ZW1,XW2,YW2,ZW2,RAD
STOP
37 WRITE(*,50)
STOP
C
38 FORMAT (1X,I5,2X,'ARC RADIUS =',F9.5,2X,'FROM',F8.3,' TO',F8.3,
1' DEGREES',11X,F11.5,2X,I5,4X,I5,1X,I5,3X,I5)
39 FORMAT (6X,3F11.5,1X,3F11.5)
40 FORMAT (////,33X,'- - - STRUCTURE SPECIFICATION - - -',//,37X,
1'COORDINATES MUST BE INPUT IN',/,37X,'METERS OR BE SCALED TO ',
2'METERS',/,37X,'BEFORE STRUCTURE INPUT IS ENDED',//)
41 FORMAT(2X,'WIRE',79X,'NO. OF',4X,'FIRST',2X,'LAST',5X,'TAG',/,
1 2X,'NO.',8X,'X1',9X,'Y1',9X,'Z1',10X,'X2',9X,'Y2',9X,'Z2',6X,
2'RADIUS',3X,'SEG.',5X,'SEG.',3X,'SEG.',5X,'NO.')
42 FORMAT (A2,I4,I5,7F10.5)
43 FORMAT (1X,I5,3F11.5,1X,4F11.5,2X,I5,4X,I5,1X,I5,3X,I5)
44 FORMAT(6X,'STRUCTURE REFLECTED ALONG THE AXES',3(1X,A1),
1'.TAGS INCREMENTED BY',I5)
45 FORMAT (6X,'STRUCTURE ROTATED ABOUT Z-AXIS',I3,' TIMES. LABELS',
1' INCREMENTED BY',I5)
46 FORMAT (6X,'STRUCTURE SCALED BY FACTOR',F10.5)
47 FORMAT (6X,'THE STRUCTURE HAS BEEN MOVED, MOVE DATA CARD IS -',
1 /6X,I3,I5,7F10.5)
48 FORMAT (' GEOMETRY DATA CARD ERROR')
49 FORMAT (1X,A2,I3,I5,7F10.5)
50 FORMAT(' NUMBER OF WIRE SEGMENTS AND SURFACE PATCHES EXCEEDS',
1' DIMENSION LIMIT.')
51 FORMAT (1X,I5,A1,F10.5,2F11.5,1X,3F11.5)
52 FORMAT(' ERROR - GF MUST BE FIRST GEOMETRY DATA CARD')
53 FORMAT (////33X,'- - - - SEGMENTATION DATA - - - -',//,40X,
1'COORDINATES IN METERS',//,25X,'I+ AND I- INDICATE THE SEGMENTS',
2' BEFORE AND AFTER I',//)
54 FORMAT (2X,'SEG.',3X,'COORDINATES OF SEG. CENTER',5X,'SEG.',5X,
1'ORIENTATION ANGLES',4X,'WIRE',4X,'CONNECTION DATA',3X,'TAG',/,2X,
2'NO.',7X,'X',9X,'Y',9X,'Z',7X,'LENGTH',5X,'ALPHA',5X,'BETA',6X,
3'RADIUS',4X,'I-',3X,'I',4X,'I+',4X,'NO.')
55 FORMAT (1X,I5,4F10.5,1X,3F10.5,1X,3I5,2X,I5)
56 FORMAT(' SEGMENT DATA ERROR')
57 FORMAT (////,44X,'- - - SURFACE PATCH DATA - - -',//,49X,
1'COORDINATES IN METERS',//,1X,'PATCH',5X,'COORD. OF PATCH CENTER',
27X,'UNIT NORMAL VECTOR',6X,'PATCH',12X,'COMPONENTS OF UNIT ',
3'TANGENT VECTORS',/,2X,'NO.',6X,'X',9X,'Y',9X,'Z',9X,'X',7X,
4'Y',7X,'Z',7X,'AREA',7X,'X1',6X,'Y1',6X,'Z1',7X,'X2',6X,'Y2',
5 6X,'Z2')
58 FORMAT (1X,I4,3F10.5,1X,3F8.4,F10.5,1X,3F8.4,1X,3F8.4)
59 FORMAT (1X,I5,A1,F10.5,2F11.5,1X,3F11.5,5X,'SURFACE -',I4,' BY',
1 I3,' PATCHES')
60 FORMAT(' PATCH DATA ERROR')
61 FORMAT(9X,'ABOVE WIRE IS TAPERED. SEG. LENGTH RATIO =',F9.5,/,
1 33X,'RADIUS FROM',F9.5,' TO',F9.5)
C***
C*** GH STUFF HELIX-SPIRAL RWA 2 APR 89 WILL ADD 3 LINES
C***
CCC124FORMAT(5X,' HELIX-SPIRAL STRUCTURE- NUMBER OF TURNS =',F8.3,
CCC 15X,' TOTAL AXIAL LENGTH =',F8.3/1X,I5,2X,'RADIUS OF HELIX =',2(2X,
CCC 2F8.3),28X,F11.5,2X,I5,4X,I5,1X,I5,3X,I5)
END
C***
C*** GM STUFF SELECTED MOVE RWA 02 APR 89 CHANGE 2 LINES
C
SUBROUTINE MOVE (ROX,ROY,ROZ,XS,YS,ZS,IXT1,IXT2,NRPT,ITGI,LD,
1 X,Y,Z,BI,ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,X2,Y2,Z2)
C SUBROUTINE MOVE (ROX,ROY,ROZ,XS,YS,ZS,ITS,NRPT,ITGI,LD,X,Y,Z,
C 1 BI,ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,X2,Y2,Z2)
C
C SUBROUTINE MOVE MOVES THE STRUCTURE WITH RESPECT TO ITS
C COORDINATE SYSTEM OR REPRODUCES STRUCTURE IN NEW POSITIONS.
C STRUCTURE IS ROTATED ABOUT X,Y,Z AXES BY ROX,ROY,ROZ
C RESPECTIVELY, THEN SHIFTED BY XS,YS,ZS
C
INTEGER*4 ITAG,N1,N2,N,NP,M1,M2,M,MP,IPSYM
REAL*8 SPS,CPS,STH,CTH,SPH,CPH,XX,XY,XZ,YX,YY,YZ,ZX,ZY,ZZ
REAL*8 ROX,ROY,ROZ,XS,YS,ZS
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
DIMENSION T1X(LD),T1Y(LD),T1Z(LD),T2X(LD),T2Y(LD),T2Z(LD),
1 X2(LD),Y2(LD),Z2(LD),ITAG(LD),X(LD),Y(LD),Z(LD),BI(LD),SALP(LD)
IF (ABS(ROX)+ABS(ROY).GT.1.D-10) IPSYM=IPSYM*3
SPS=DSIN(ROX)
CPS=DCOS(ROX)
STH=DSIN(ROY)
CTH=DCOS(ROY)
SPH=DSIN(ROZ)
CPH=DCOS(ROZ)
XX=CPH*CTH
XY=CPH*STH*SPS-SPH*CPS
XZ=CPH*STH*CPS+SPH*SPS
YX=SPH*CTH
YY=SPH*STH*SPS+CPH*CPS
YZ=SPH*STH*CPS-CPH*SPS
ZX=-STH
ZY=CTH*SPS
ZZ=CTH*CPS
NRP=NRPT
IF (NRPT.EQ.0) NRP=1
IX=1
IF (N.LT.N2) GO TO 3
C***
C*** GM STUFF SELECTED MOVE RWA 02 APR 89 ADD 4 LINES/REPLACE 3
C***
IMT1 = IXT1
IMT2 = IXT2
IF(IMT2.EQ.0) IMT2 = IMT1
IF(IMT1.EQ.0) IMT2 = 0
I1 = N2
CCC I1=ISEGNO(ITS,1,LD,ITAG)
CCC IF (I1.LT.N2) I1=N2
CCC IX=I1
K=N
CCC IF (NRPT.EQ.0) K=I1-1
DO 2 IR=1,NRP
DO 1 I=I1,N
C***
C*** GM STUFF SELECTED MOVE RWA 02 APR 89 ADD 3 LINES/CHANGE 1
C***
IF(IMT1.EQ.0)GO TO 7
IF((ITAG(I).LT.IMT1).OR.(ITAG(I).GT.IMT2))GO TO 1
7 K=K+1
IF(NRPT.EQ.0)K = I
CCC K=K+1
XI=X(I)
YI=Y(I)
ZI=Z(I)
X(K)=XI*XX+YI*XY+ZI*XZ+XS
Y(K)=XI*YX+YI*YY+ZI*YZ+YS
Z(K)=XI*ZX+YI*ZY+ZI*ZZ+ZS
XI=X2(I)
YI=Y2(I)
ZI=Z2(I)
X2(K)=XI*XX+YI*XY+ZI*XZ+XS
Y2(K)=XI*YX+YI*YY+ZI*YZ+YS
Z2(K)=XI*ZX+YI*ZY+ZI*ZZ+ZS
BI(K)=BI(I)
ITAG(K)=ITAG(I)
IF(ITAG(I).NE.0)ITAG(K)=ITAG(I)+ITGI
1 CONTINUE
I1=N+1
C***
C*** GM STUFF SELECTED MOVE RWA 02 APR 89 ADD 1 LINE/CHANGE 1
C***
IF(NRPT.GT.0)N = K
IMT1 = 0
CCC N=K
2 CONTINUE
3 IF (M.LT.M2) GO TO 6
I1=M2
K=M
LDI=LD+1
IF (NRPT.EQ.0) K=M1
DO 5 II=1,NRP
DO 4 I=I1,M
K=K+1
IR=LDI-I
KR=LDI-K
XI=X(IR)
YI=Y(IR)
ZI=Z(IR)
X(KR)=XI*XX+YI*XY+ZI*XZ+XS
Y(KR)=XI*YX+YI*YY+ZI*YZ+YS
Z(KR)=XI*ZX+YI*ZY+ZI*ZZ+ZS
XI=T1X(IR)
YI=T1Y(IR)
ZI=T1Z(IR)
T1X(KR)=XI*XX+YI*XY+ZI*XZ
T1Y(KR)=XI*YX+YI*YY+ZI*YZ
T1Z(KR)=XI*ZX+YI*ZY+ZI*ZZ
XI=T2X(IR)
YI=T2Y(IR)
ZI=T2Z(IR)
T2X(KR)=XI*XX+YI*XY+ZI*XZ
T2Y(KR)=XI*YX+YI*YY+ZI*YZ
T2Z(KR)=XI*ZX+YI*ZY+ZI*ZZ
SALP(KR)=SALP(IR)
4 BI(KR)=BI(IR)
I1=M+1
5 M=K
C***
C*** GM STUFF SELECTED MOVE RWA 02 APR 89 CHANGE 1 LINE
C***
6 IF ((NRPT.EQ.0).AND.(IXT1.EQ.0)) RETURN
CCC6 IF ((NRPT.EQ.0).AND.(IX.EQ.1)) RETURN
NP=N
MP=M
IPSYM=0
RETURN
END
C
C
C
SUBROUTINE REFLC(IX,IY,IZ,ITX,NOP,LD,X,Y,Z,BI,
1 ITAG,SALP,T1X,T1Y,T1Z,T2X,T2Y,T2Z,X2,Y2,Z2)
C
C REFLC REFLECTS PARTIAL STRUCTURE ALONG X,Y, OR Z AXES OR ROTATES
C STRUCTURE TO COMPLETE A SYMMETRIC STRUCTURE.
C
INTEGER*4 ITAG,N1,N2,N,NP,M1,M2,M,MP,IPSYM
REAL*8 E1,E2,SAM,CS,SS,XK,YK
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
DIMENSION T1X(LD),T1Y(LD),T1Z(LD),T2X(LD),T2Y(LD),T2Z(LD),X2(LD),
1 Y2(LD),Z2(LD),X(LD),Y(LD),Z(LD),BI(LD),SALP(LD),ITAG(LD)
NP=N
MP=M
IPSYM=0
ITI=ITX
IF (IX.LT.0) GO TO 19
IF (NOP.EQ.0) RETURN
IPSYM=1
IF (IZ.EQ.0) GO TO 6
C
C REFLECT ALONG Z AXIS
C
IPSYM=2
IF (N.LT.N2) GO TO 3
DO 2 I=N2,N
NX=I+N-N1
E1=Z(I)
E2=Z2(I)
IF((ABS(E1)+ABS(E2)).GT.1.D-5.AND.(E1*E2).GE.-1.D-6) GO TO 1
WRITE(*,24) I
STOP
1 X(NX)=X(I)
Y(NX)=Y(I)
Z(NX)=-E1
X2(NX)=X2(I)
Y2(NX)=Y2(I)
Z2(NX)=-E2
ITAGI=ITAG(I)
IF (ITAGI.EQ.0) ITAG(NX)=0
IF (ITAGI.NE.0) ITAG(NX)=ITAGI+ITI
2 BI(NX)=BI(I)
N=N*2-N1
ITI=ITI*2
3 IF (M.LT.M2) GO TO 6
NXX=LD+1-M1
DO 5 I=M2,M
NXX=NXX-1
NX=NXX-M+M1
IF (ABS(Z(NXX)).GT.1.E-10) GO TO 4
WRITE(*,25) I
STOP
4 X(NX)=X(NXX)
Y(NX)=Y(NXX)
Z(NX)=-Z(NXX)
T1X(NX)=T1X(NXX)
T1Y(NX)=T1Y(NXX)
T1Z(NX)=-T1Z(NXX)
T2X(NX)=T2X(NXX)
T2Y(NX)=T2Y(NXX)
T2Z(NX)=-T2Z(NXX)
SALP(NX)=-SALP(NXX)
5 BI(NX)=BI(NXX)
M=M*2-M1
6 IF (IY.EQ.0) GO TO 12
C
C REFLECT ALONG Y AXIS
C
IF (N.LT.N2) GO TO 9
DO 8 I=N2,N
NX=I+N-N1
E1=Y(I)
E2=Y2(I)
IF((ABS(E1)+ABS(E2)).GT.1.D-5.AND.(E1*E2).GE.-1.D-6) GO TO 7
WRITE(*,24) I
STOP
7 X(NX)=X(I)
Y(NX)=-E1
Z(NX)=Z(I)
X2(NX)=X2(I)
Y2(NX)=-E2
Z2(NX)=Z2(I)
ITAGI=ITAG(I)
IF (ITAGI.EQ.0) ITAG(NX)=0
IF (ITAGI.NE.0) ITAG(NX)=ITAGI+ITI
8 BI(NX)=BI(I)
N=N*2-N1
ITI=ITI*2
9 IF (M.LT.M2) GO TO 12
NXX=LD+1-M1
DO 11 I=M2,M
NXX=NXX-1
NX=NXX-M+M1
IF (ABS(Y(NXX)).GT.1.E-10) GO TO 10
WRITE(*,25) I
STOP
10 X(NX)=X(NXX)
Y(NX)=-Y(NXX)
Z(NX)=Z(NXX)
T1X(NX)=T1X(NXX)
T1Y(NX)=-T1Y(NXX)
T1Z(NX)=T1Z(NXX)
T2X(NX)=T2X(NXX)
T2Y(NX)=-T2Y(NXX)
T2Z(NX)=T2Z(NXX)
SALP(NX)=-SALP(NXX)
11 BI(NX)=BI(NXX)
M=M*2-M1
12 IF (IX.EQ.0) GO TO 18
C
C REFLECT ALONG X AXIS
C
IF (N.LT.N2) GO TO 15
DO 14 I=N2,N
NX=I+N-N1
E1=X(I)
E2=X2(I)
IF((ABS(E1)+ABS(E2)).GT.1.D-5.AND.(E1*E2).GE.-1.D-6) GO TO 13
WRITE(*,24) I
STOP
13 X(NX)=-E1
Y(NX)=Y(I)
Z(NX)=Z(I)
X2(NX)=-E2
Y2(NX)=Y2(I)
Z2(NX)=Z2(I)
ITAGI=ITAG(I)
IF (ITAGI.EQ.0) ITAG(NX)=0
IF (ITAGI.NE.0) ITAG(NX)=ITAGI+ITI
14 BI(NX)=BI(I)
N=N*2-N1
15 IF (M.LT.M2) GO TO 18
NXX=LD+1-M1
DO 17 I=M2,M
NXX=NXX-1
NX=NXX-M+M1
IF (ABS(X(NXX)).GT.1.E-10) GO TO 16
WRITE(*,25) I
STOP
16 X(NX)=-X(NXX)
Y(NX)=Y(NXX)
Z(NX)=Z(NXX)
T1X(NX)=-T1X(NXX)
T1Y(NX)=T1Y(NXX)
T1Z(NX)=T1Z(NXX)
T2X(NX)=-T2X(NXX)
T2Y(NX)=T2Y(NXX)
T2Z(NX)=T2Z(NXX)
SALP(NX)=-SALP(NXX)
17 BI(NX)=BI(NXX)
M=M*2-M1
18 RETURN
C
C REPRODUCE STRUCTURE WITH ROTATION TO FORM CYLINDRICAL STRUCTURE
C
19 FNOP=NOP
IPSYM=-1
SAM=6.283185308D0/FNOP
CS=DCOS(SAM)
SS=DSIN(SAM)
IF (N.LT.N2) GO TO 21
N=N1+(N-N1)*NOP
NX=NP+1
DO 20 I=NX,N
K=I-NP+N1
XK=X(K)
YK=Y(K)
X(I)=XK*CS-YK*SS
Y(I)=XK*SS+YK*CS
Z(I)=Z(K)
XK=X2(K)
YK=Y2(K)
X2(I)=XK*CS-YK*SS
Y2(I)=XK*SS+YK*CS
Z2(I)=Z2(K)
ITAGI=ITAG(K)
IF (ITAGI.EQ.0) ITAG(I)=0
IF (ITAGI.NE.0) ITAG(I)=ITAGI+ITI
20 BI(I)=BI(K)
21 IF (M.LT.M2) GO TO 23
M=M1+(M-M1)*NOP
NX=MP+1
K=LD+1-M1
DO 22 I=NX,M
K=K-1
J=K-MP+M1
XK=X(K)
YK=Y(K)
X(J)=XK*CS-YK*SS
Y(J)=XK*SS+YK*CS
Z(J)=Z(K)
XK=T1X(K)
YK=T1Y(K)
T1X(J)=XK*CS-YK*SS
T1Y(J)=XK*SS+YK*CS
T1Z(J)=T1Z(K)
XK=T2X(K)
YK=T2Y(K)
T2X(J)=XK*CS-YK*SS
T2Y(J)=XK*SS+YK*CS
T2Z(J)=T2Z(K)
SALP(J)=SALP(K)
22 BI(J)=BI(K)
23 RETURN
C
24 FORMAT (29H GEOMETRY DATA ERROR--SEGMENT,I5,26H LIES IN PLANE OF S
1YMMETRY)
25 FORMAT (27H GEOMETRY DATA ERROR--PATCH,I4,26H LIES IN PLANE OF SYM
1METRY)
END
C
C
C
SUBROUTINE WIRE(X,Y,Z,BI,X2,Y2,Z2,XW1,YW1,ZW1,XW2,YW2,ZW2,
1 RAD,RDEL,RRAD,ITAG,LD,NS,ITG)
C
C SUBROUTINE WIRE GENERATES SEGMENT GEOMETRY DATA FOR A STRAIGHT
C WIRE OF NS SEGMENTS.
C
REAL*8 DELZ,XW1,YW1,ZW1,XW2,YW2,ZW2,XD,YD,ZD,XS1,XS2,
1 YS1,YS2,ZS1,ZS2
INTEGER*4 ITAG,N1,N2,N,NP,M1,M2,M,MP,IPSYM
COMMON/DATAD/N1,N2,N,NP,M1,M2,M,MP,IPSYM,WLAM
DIMENSION X2(LD),Y2(LD),Z2(LD),X(LD),Y(LD),Z(LD),BI(LD),ITAG(LD)
C**
IST=N+1
N=N+NS
NP=N
MP=M
IPSYM=0
IF (NS.LT.1) RETURN
XD=XW2-XW1
YD=YW2-YW1
ZD=ZW2-ZW1
IF (ABS(RDEL-1.).LT.1.E-6) GO TO 1
DELZ=DSQRT(XD*XD+YD*YD+ZD*ZD)
XD=XD/DELZ
YD=YD/DELZ
ZD=ZD/DELZ
DELZ=DELZ*(1.-RDEL)/(1.-RDEL**NS)
RD=RDEL
GO TO 2
1 FNS=NS
XD=XD/FNS
YD=YD/FNS
ZD=ZD/FNS
DELZ=1.
RD=1.
2 RADZ=RAD
XS1=XW1
YS1=YW1
ZS1=ZW1
DO 3 I=IST,N
ITAG(I)=ITG
XS2=XS1+XD*DELZ
YS2=YS1+YD*DELZ
ZS2=ZS1+ZD*DELZ
X(I)=XS1
Y(I)=YS1
Z(I)=ZS1
X2(I)=XS2
Y2(I)=YS2
Z2(I)=ZS2
BI(I)=RADZ
DELZ=DELZ*RD
RADZ=RADZ*RRAD
XS1=XS2
YS1=YS2
3 ZS1=ZS2
X2(N)=XW2
Y2(N)=YW2
Z2(N)=ZW2
RETURN
END